using System;
using System.Linq;
using System.Linq.Expressions;
using Appetite.Domain.Models;

namespace Appetite.Domain.Repository
{
    public interface IRecipeRepository
    {
        // TODO : refactor our repository so it returns a List instead of an IQueryable.
        // Think about a nice seperation between reading and writing (cqrs ?)

        IQueryable<Recipe> All { get; }
        IQueryable<Recipe> AllIncluding(params Expression<Func<Recipe, object>>[] includeProperties);
        Recipe Find(System.Guid id);
        void InsertOrUpdate(Recipe recipe);
        void Delete(System.Guid id);
        void Save();
    }
}